package com.heng.threadLocalDemo;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class MyData{
    ThreadLocal<Integer> threadLocalField = ThreadLocal.withInitial(()->0);

    public void add(){
        threadLocalField.set(1+threadLocalField.get());
    }
}

public class ThreadLocalDemo2 {
    public static void main(String[] args) {
        MyData myData = new MyData();
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        //线程池存在复用
        try {
            for (int i = 0; i < 10; i++) {
                threadPool.submit(() -> {
                  try {
                      Integer beforeInt = myData.threadLocalField.get();
                      myData.add();
                      Integer afterInt = myData.threadLocalField.get();
                      System.out.println(Thread.currentThread().getName()+"\t before:"+beforeInt+"\t after:"+afterInt);

                  }finally {
                      myData.threadLocalField.remove();
                  }
                });
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            threadPool.shutdown();
        }
    }
}
